import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLDataException;
import java.sql.SQLException;
import java.util.Scanner;

/**
 * \* Created with IntelliJ IDEA.
 * \* User: Administrator
 * \* Date: 2022/3/15
 * \* Time: 22:04
 * \* To change this template use File | Settings | File Templates.
 * \* Description:
 * \
 */
public class TestJDBC {
    public static void main(String[] args) throws SQLException {
        Scanner scanner = new Scanner(System.in);



        //1.创建数据库
        DataSource dataSource = new MysqlDataSource();
        //JDBC带的接口                  mysql的jar包，里面提供了一个实现的DataSource接口的类
        //设置数据库所在的地址
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java102?characterEncoding=utf8&useSSL=false");
        //设置数据库的用户名
        ((MysqlDataSource) dataSource).setUser("root");
        //设置登录数据库的密码
        ((MysqlDataSource) dataSource).setPassword("123456");

        //2.让代码与数据库建立连接
        Connection connection = dataSource.getConnection();

        //2.5 让用户通过控制台输入一下待插入的数据
        System.out.println("请输入学号：");
        int id = scanner.nextInt();
        System.out.println("请输入姓名：");
        String name = scanner.next();

        //3.操作数据库，以插入数据为例
        //关键所在就是构造一个SQL语句
        //在JDBC中构造SQL，不必带上；
        //;只是在命令行中用来区分不同的语句，现在是直接在代码中操作

       String sql = "insert into student values(?, ?)";//用?代表不确定
       // String sql = "insert into student values(" + id + ", '张三')";//旧时代写法，容易被sql注入攻击
        //此处光是一个String类型sql还不行，还需把这个String包装成一个“语句对象”
        PreparedStatement statement = connection.prepareStatement(sql);
        //进行替换操作
        statement.setInt(1,id);
        statement.setString(2,name);
        System.out.println("statement:" +statement);

        //4.执行SQL
        // SQL里面如果是 insert，update，delete 都是以executeUpdate 方法
        // SQL里面如果是select，则实用executeQuery方法
        //下面语句——返回值表示这个操作影响了几行，就相当于在控制台输出后得到的数字
        int ret = statement.executeUpdate();
        System.out.println(ret);
        //5.此时SQL已经执行完毕，然后还需要释放资源
        statement.close();
        connection.close();
    }
}
